"""

内部函数 且 使用到了外部变量

内部函数 和 外部函数中被内部函数使用的变量 的组合 叫 闭包

a = greeting()
a()
理论上变量应该是取不到的
实际上变量保存在了 a.__closure__（翻译过来就是闭包）
因此才可以实现这个能力
闭包内部的变量不会立刻被销毁
这个值会常驻内存 如果要修改这个值 需要慎重使用
"""


name = "李华"
def greeting():
    meet = "ddd"
    value = 20

    def inner(number):
        nonlocal value  # 声明使用的是外面的局部变量
        global name
        print(f"before meet: {meet} value: {value} name: {name}")
        value += number
        name = f"dd{value}"
        print(f"after meet: {meet} value: {value} name: {name}")

    meet = "account"
    return inner


print(name)
a = greeting()
a(10)
a(10)
print(name)
"""
输出：

李华
before meet: account value: 20 name: 李华
after meet: account value: 30 name: dd30
before meet: account value: 30 name: dd30
after meet: account value: 40 name: dd40
dd40

"""